/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.uca.sisbec.helpers.reportes;

import com.uca.sisbec.beans.NameAndCarnetBean;
import com.uca.sisbec.beans.ReporteGastosBean;
import com.uca.sisbec.beans.ReporteGastosXBecBean;
import com.uca.sisbec.forms.reportes.ReporteDeGastosForm;
import com.uca.sisbec.forms.reportes.ReporteDeGastosPorBecForm;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Alex
 */
public class ReporteGastosHelper {

    private Session session;

    public ReporteGastosHelper(Session session) {
        this.session = session;
    }

    public List<ReporteGastosBean> ConstruirReporteGastos(ReporteDeGastosForm data) {
        String hql = ConstruyeQueryGastos(data);
        Query query = session.createQuery(hql);
        
        query.setString("concepto", "%"+data.getConcepto()+"%");
        query.setString("fechaIni", data.getFechaIni());
        query.setString("fechaFin", data.getFechaFin());
        
        return new ArrayList<ReporteGastosBean>(query.list());
    }
    
    private String ConstruyeQueryGastos(ReporteDeGastosForm data) {
        String selectHQL = "select new com.uca.sisbec.beans.ReporteGastosBean(g.idGasto, g.tipo, g.monto, g.concepto, g.fechaReg, g.usuarioUltimoCambio, g.fechaUltimoCambio, g.estado, g.justificacionCambio, g.cantidadBecBenef) from Gasto g where g.concepto like :concepto and g.fechaReg >= :fechaIni and g.fechaReg <= :fechaFin";
        String masCondicionesHQL = "";
        if(data.getTipoGasto().equals("F")){
            masCondicionesHQL += " AND g.tipo = 'F'";
        } else {
            if(data.getTipoGasto().equals("V")){
                masCondicionesHQL += " AND g.tipo = 'V'";
            }
        }
        selectHQL += masCondicionesHQL;
        return selectHQL;
    }
      
    public List<ReporteGastosXBecBean> ConstruirReporteGastosXBec(ReporteDeGastosPorBecForm data) {
        String hql = ConstruyeQueryGastosPorBec(data);
        Query query = session.createQuery(hql);
        query.setString("concepto", "%"+data.getConcepto()+"%");
        query.setString("fechaIni", data.getFechaIni());
        query.setString("fechaFin", data.getFechaFin());
        query.setString("carnet", data.getCarnet());
        return new ArrayList<ReporteGastosXBecBean>(query.list());
    }
    
    private String ConstruyeQueryGastosPorBec(ReporteDeGastosPorBecForm data) {
        String selectHQL = "select new com.uca.sisbec.beans.ReporteGastosXBecBean(g.idGasto, g.tipo, g.monto/g.cantidadBecBenef, g.concepto, g.fechaReg, g.usuarioUltimoCambio, g.fechaUltimoCambio, g.estado, g.justificacionCambio) from Gasto g, GastoXBecario gxb where g.idGasto = gxb.id.idGasto and g.concepto like :concepto and g.fechaReg >= :fechaIni and g.fechaReg <= :fechaFin and gxb.id.carnet = :carnet";
        String masCondicionesHQL = "";
        if(data.getTipoGasto().equals("F")){
            masCondicionesHQL += " AND g.tipo = 'F'";
        } else {
            if(data.getTipoGasto().equals("V")){
                masCondicionesHQL += " AND g.tipo = 'V'";
            }
        }
        selectHQL += masCondicionesHQL;
        return selectHQL;
    }
    
    public List<NameAndCarnetBean> ListaBecariosBenef(Integer idGasto) {
        String hql = "select new com.uca.sisbec.beans.NameAndCarnetBean(concat(b.carnet, ' - ', b.apellidos, ', ', b.nombres)) From Becario b, Gasto g, GastoXBecario gxb where g.idGasto = " + idGasto.toString() + " and g.idGasto = gxb.id.idGasto and gxb.id.carnet = b.carnet";
        Query query = session.createQuery(hql);
        return new ArrayList<NameAndCarnetBean>(query.list());
    }
    
}
